/*
 * Copyright (c) 2007, Xiong Yingfei, the University of Tokyo
 * All rights reserved.
 */
package ac.jp.u_tokyo.SyncLib;

import java.util.Collection;
import java.util.List;

import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.AfterThrowing;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;

import ac.jp.u_tokyo.SyncLib.interactive.Console;
import ac.jp.u_tokyo.SyncLib.util.Helper;

public interface Sync {
    
    int getParaCount();
    
    Mod[] synchronize(Mod[] modifications) 
        throws SynchronizationFailedException;
    
//    Object[] getInitialValues();
    
    Mod[] resynchronize(Object[] values,
            Mod[] modifications)
            throws SynchronizationFailedException;
    
    boolean isModConcerned(int index, Mod mod) throws ModTypeUnsupportedException;
    
    void setRevertPoint();
    void cancelRevertPoint();
    void revert();
    
}

